package infinity.seed;

import java.awt.Component;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;

/**
 * Exportation des données dans un fichier CSV.
 * @author Cyril SCHUMACHER <cyril.schumacher at viacesi.fr>
 * @author Jordan RICHET <jordan.richet at viacesi.fr>
 */
public class ExportCSV {
    // <editor-fold defaultstate="collapsed" desc="Attributs.">
    /**
     * Tableaux contenant les statistiques sur les jeunes pousses.
     */
    public ArrayList<Float> seed;
    /**
     * Tableaux contenant les statistiques sur les arbustes.
     */
    public ArrayList<Float> bush;
    /**
     * Tableaux contenant les statistiques sur les arbres.
     */
    public ArrayList<Float> tree;
    /**
     * Tableaux contenant les statistiques sur les cellules vides.
     */
    public ArrayList<Float> empty;
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Méthodes.">
    // <editor-fold defaultstate="collapsed" desc="Constructeur.">
    /**
     * Constructeur.
     */
    public ExportCSV() {
        // Initialise les tableaux.
        this.seed = new ArrayList();
        this.bush = new ArrayList();
        this.tree = new ArrayList();
        this.empty = new ArrayList();
    }
    // </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="Créer le contenu du fichier CSV.">
    /**
     * Créer le contenu du fichier CSV.
     * @param path Chemin du fichier.
     * @throws IOException
     */
    private void _compositeFile(String path) throws IOException {
        try (FileWriter writer = new FileWriter(path)) {
            writer.append("jeune pousse;arbuste;arbre;vide\n");
            
            // Ajoute les lignes.
            for(int i = 0; i < this.seed.size(); i++) {
                // Forme une chaîne de caractère correspondant à une ligne (évite un problème de mémoire).
                StringBuilder row = new StringBuilder();
                row.append(this.seed.get(i));
                row.append(";");
                row.append(this.bush.get(i));
                row.append(";");
                row.append(this.tree.get(i));
                row.append(";");
                row.append(this.empty.get(i));
                row.append("\n");
                writer.append(row);
            }
            // Enregistre et ferme le fichier.
            writer.flush();
        }
    }
    // </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="Sauvegarde les données dans un fichier CSV.">
    /**
     * Sauvegarde les données dans un fichier CSV.
     * @param parent Fenêtre appelant cette méthode (évite que le client fasse une autre action).
     * @return Retourne TRUE si le fichier a été sauvegardé, sinon FALSE.
     */
    public Boolean save(Component parent){
        // Ouvre une fenêtre de dialogue pour récupèrer le chemin du fichier.
        JFileChooser fileCSV = new JFileChooser();
        int option = fileCSV.showSaveDialog(parent);
        
        // Si le client a cliqué sur le bouton "Enregistrer", on crée le fichier.
        if (option == JFileChooser.APPROVE_OPTION) {
            File fileName = new File(fileCSV.getSelectedFile() + ".csv");
            try {
                this._compositeFile(fileName.getPath());
            }
            catch(IOException e) {
                // Enregistre l'exception.
                Logger.getLogger(ExportCSV.class.getName()).log(Level.WARNING, null, e);
                return false;
            }
        }
       
        return true;
    }
    // </editor-fold>
    // </editor-fold>
}